package com.vanysoft.common.utils.Des;

import com.vanysoft.common.utils.date.DateUtil;
import com.vanysoft.framework.exception.VanySoftBaseException;

import java.io.IOException;
import java.util.Date;

/**
 * 类名称：VanySoftLicenseUtil 类描述：通用序列号工具 创建人：X 创建时间：2017年9月18日下午7:10:55 修改人：X
 * 修改时间：2017年9月18日 版本信息：@version 1.0 Copyright (c) 2017SharpClaw-版权所有 修改备注：
 */
public class VanySoftLicenseUtil {

    private static String separator = ";";
    /**
     public static void main(String[] args) throws Exception {
     //String serialNo = "ac25-cb91-e13b-4b94-9ada-bab6-540f-22c2";
     String serialNoBegin = "ac25-cb91";
     String serialNo =serialNoBegin+UUID.randomUUID().toString().substring(9);
     System.out.println(serialNo);
     System.out.println(serialNo.length());
     String customInfo = "2017-09-18 00:00:00.0"+separator+"true"+separator+"test"+separator+"101"+separator+"2017-10-18 00:00:00.0";
     String license = createLicense(serialNo, customInfo);
     System.out.println(license);
     String customInfoD = DecryptedLicense(serialNo, license);
     System.out.println(customInfoD);
     String xx = createTestLicense(serialNo);
     System.out.println(xx);
     }
     **/
    /**
     * Function Name               createTestLicense
     *
     * @param loginDemo
     * @return
     * @throws Exception
     * @throws VanySoftBaseException
     * @description 生成试用版的License
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月19日上午11:04:11          KING          Initial
     * *********************************************************************
     */
    public static String createTestLicense(String serialNo) throws Exception {
        Date now = new Date();
        String testLicense = "";
        String startDate = DateUtil.date2String(now, "yyyy-MM-dd");
        String endDate = DateUtil.date2String(DateUtil.addDay(now, 1, "M"), "yyyy-MM-dd");
        String customer = "test";
        String productCode = "000";
        testLicense = createLicense(serialNo, startDate, endDate, customer, productCode);
        return testLicense;
    }

    /**
     * Function Name               DecryptedCustom
     *
     * @param loginDemo
     * @return
     * @throws VanySoftBaseException
     * @description 解析license的客户信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年9月18日下午11:48:21          X          Initial
     * *********************************************************************
     */
    public static String[] DecryptedCustom(String serialNo, String license) {
        try {
            String customInfo = DecryptedLicense(serialNo, license);
            String[] strs = customInfo.split(separator);
            return strs;
        } catch (IOException e) {
            return null;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * Function Name checkOutLicense
     *
     * @param loginDemo
     * @return
     * @throws VanySoftBaseException
     * @description 检查license的合法性 Modify History: Date Programmer Notes
     * --------- --------------- --------- 2017年9月18日下午7:34:51 X
     * Initial
     * *********************************************************************
     */
    public static boolean checkOutLicense(String serialNo, String license) {
        boolean b = false;
        try {
            String customInfo = DecryptedLicense(serialNo, license);
            String[] strs = customInfo.split(separator);
            if ("true".equalsIgnoreCase(strs[1])) {
                b = true;
            }
        } catch (IOException e) {
            b = false;
        } catch (Exception e) {
            b = false;
        } finally {
            return b;
        }
    }

    /**
     * Function Name createLicense
     *
     * @param loginDemo
     * @return
     * @throws VanySoftBaseException
     * @description Modify History: Date Programmer Notes ---------
     * --------------- --------- 2017年9月18日下午7:26:29 KING Initial
     * *********************************************************************
     */
    public static String createLicense(String serialNo, String startDate, String endDate, String customer,
                                       String productCode) throws Exception {
        String customInfo = startDate + separator + "true" + separator + customer + separator + productCode + separator + endDate;
        return createLicense(serialNo, customInfo);
    }

    /**
     * Function Name createLicense
     *
     * @param
     * @return
     * @throws Exception
     * @throws VanySoftBaseException
     * @description 生成License Modify History: Date Programmer Notes ---------
     * --------------- --------- 2017年9月18日下午6:59:41 X Initial
     * *********************************************************************
     */
    public static String createLicense(String serialNo, String customInfo) throws Exception {
        String license = DesUtil.encrypt(customInfo, serialNo);
        //license = StringReversal.leftMoveIndex(license, 3);
        return license;
    }

    /**
     * Function Name DecryptedLicense
     *
     * @param loginDemo
     * @return
     * @throws Exception
     * @throws IOException
     * @throws VanySoftBaseException
     * @description 解析License Modify History: Date Programmer Notes ---------
     * --------------- --------- 2017年9月18日下午7:00:30 X Initial
     * *********************************************************************
     */
    public static String DecryptedLicense(String serialNo, String license) throws IOException, Exception {
        //license = StringReversal.rightMoveIndex(license, 3);
        String customInfo = DesUtil.decrypt(license, serialNo);
        return customInfo;
    }
}
